{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Importing PulP solver\n",
    "from pulp import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Inputing the Demand points\n",
    "demand_points=['Port of Salalah', 'Port of Gaza','Port of Jebel Ali']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Port of Salalah', 'Port of Gaza', 'Port of Jebel Ali']"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "demand_points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Inputing the Supply Points\n",
    "supply_points=['Port of Shanghai','Port of Marseille','Port of Hamburg_Germany','Port of Budapest','Port of Jawaharlal Nehru','Port of Nagoya','Port of Busan','Port of Manzanillo','Port of Kaohsiung','Port of Mersin','Port of Immingham','Port of New York','Port of Los Angeles']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Port of Shanghai',\n",
       " 'Port of Marseille',\n",
       " 'Port of Hamburg_Germany',\n",
       " 'Port of Budapest',\n",
       " 'Port of Jawaharlal Nehru',\n",
       " 'Port of Nagoya',\n",
       " 'Port of Busan',\n",
       " 'Port of Manzanillo',\n",
       " 'Port of Kaohsiung',\n",
       " 'Port of Mersin',\n",
       " 'Port of Immingham',\n",
       " 'Port of New York',\n",
       " 'Port of Los Angeles']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "supply_points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Inputing the distances\n",
    "distance = dict(zip(supply_points,[dict(zip(demand_points, [6270,7660,6627])),\n",
    "dict(zip(demand_points, [4081,1631,5080])),\n",
    "dict(zip(demand_points, [6307,3973,7306])),\n",
    "dict(zip(demand_points, [4362,1992,5360])),\n",
    "dict(zip(demand_points, [1143,3243,1335])),\n",
    "dict(zip(demand_points, [7148,8308,7505])),\n",
    "dict(zip(demand_points, [6786,8020,7143])),\n",
    "dict(zip(demand_points, [11791,8088,12790])),\n",
    "dict(zip(demand_points, [5704,7144,6063])),\n",
    "dict(zip(demand_points, [2577,316,3576])),\n",
    "dict(zip(demand_points, [6081,3399,7080])),\n",
    "dict(zip(demand_points, [7930,5196,8918])),\n",
    "dict(zip(demand_points, [11137,9280,11116]))]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Port of Shanghai': {'Port of Salalah': 6270,\n",
       "  'Port of Gaza': 7660,\n",
       "  'Port of Jebel Ali': 6627},\n",
       " 'Port of Marseille': {'Port of Salalah': 4081,\n",
       "  'Port of Gaza': 1631,\n",
       "  'Port of Jebel Ali': 5080},\n",
       " 'Port of Hamburg_Germany': {'Port of Salalah': 6307,\n",
       "  'Port of Gaza': 3973,\n",
       "  'Port of Jebel Ali': 7306},\n",
       " 'Port of Budapest': {'Port of Salalah': 4362,\n",
       "  'Port of Gaza': 1992,\n",
       "  'Port of Jebel Ali': 5360},\n",
       " 'Port of Jawaharlal Nehru': {'Port of Salalah': 1143,\n",
       "  'Port of Gaza': 3243,\n",
       "  'Port of Jebel Ali': 1335},\n",
       " 'Port of Nagoya': {'Port of Salalah': 7148,\n",
       "  'Port of Gaza': 8308,\n",
       "  'Port of Jebel Ali': 7505},\n",
       " 'Port of Busan': {'Port of Salalah': 6786,\n",
       "  'Port of Gaza': 8020,\n",
       "  'Port of Jebel Ali': 7143},\n",
       " 'Port of Manzanillo': {'Port of Salalah': 11791,\n",
       "  'Port of Gaza': 8088,\n",
       "  'Port of Jebel Ali': 12790},\n",
       " 'Port of Kaohsiung': {'Port of Salalah': 5704,\n",
       "  'Port of Gaza': 7144,\n",
       "  'Port of Jebel Ali': 6063},\n",
       " 'Port of Mersin': {'Port of Salalah': 2577,\n",
       "  'Port of Gaza': 316,\n",
       "  'Port of Jebel Ali': 3576},\n",
       " 'Port of Immingham': {'Port of Salalah': 6081,\n",
       "  'Port of Gaza': 3399,\n",
       "  'Port of Jebel Ali': 7080},\n",
       " 'Port of New York': {'Port of Salalah': 7930,\n",
       "  'Port of Gaza': 5196,\n",
       "  'Port of Jebel Ali': 8918},\n",
       " 'Port of Los Angeles': {'Port of Salalah': 11137,\n",
       "  'Port of Gaza': 9280,\n",
       "  'Port of Jebel Ali': 11116}}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Inputing the Fiber Demand\n",
    "Fiber_demand=dict(zip(demand_points, [8625729.772,7916745.706,9169267.649]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Port of Salalah': 8625729.772,\n",
       " 'Port of Gaza': 7916745.706,\n",
       " 'Port of Jebel Ali': 9169267.649}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Fiber_demand"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Inputing the Fiber Supply\n",
    "Fiber_supply=dict(zip(supply_points, [7891206.716800,4720787.525080,3013639.269080,1741988.017000,1532949.455000,1498109.694000,1289071.132000,1080032.570000,1010353.050000,870994.008400,627115.686000,256623.912100,178873.092100])) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Port of Shanghai': 7891206.7168,\n",
       " 'Port of Marseille': 4720787.52508,\n",
       " 'Port of Hamburg_Germany': 3013639.26908,\n",
       " 'Port of Budapest': 1741988.017,\n",
       " 'Port of Jawaharlal Nehru': 1532949.455,\n",
       " 'Port of Nagoya': 1498109.694,\n",
       " 'Port of Busan': 1289071.132,\n",
       " 'Port of Manzanillo': 1080032.57,\n",
       " 'Port of Kaohsiung': 1010353.05,\n",
       " 'Port of Mersin': 870994.0084,\n",
       " 'Port of Immingham': 627115.686,\n",
       " 'Port of New York': 256623.9121,\n",
       " 'Port of Los Angeles': 178873.0921}"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Fiber_supply"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set Problem Variables\n",
    "prob = LpProblem(\"Transportation\", LpMinimize)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Transportation:\n",
       "MINIMIZE\n",
       "None\n",
       "VARIABLES"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set Problem Variables\n",
    "routes = [(i,j) for i in supply_points for j in demand_points]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('Port of Shanghai', 'Port of Salalah'),\n",
       " ('Port of Shanghai', 'Port of Gaza'),\n",
       " ('Port of Shanghai', 'Port of Jebel Ali'),\n",
       " ('Port of Marseille', 'Port of Salalah'),\n",
       " ('Port of Marseille', 'Port of Gaza'),\n",
       " ('Port of Marseille', 'Port of Jebel Ali'),\n",
       " ('Port of Hamburg_Germany', 'Port of Salalah'),\n",
       " ('Port of Hamburg_Germany', 'Port of Gaza'),\n",
       " ('Port of Hamburg_Germany', 'Port of Jebel Ali'),\n",
       " ('Port of Budapest', 'Port of Salalah'),\n",
       " ('Port of Budapest', 'Port of Gaza'),\n",
       " ('Port of Budapest', 'Port of Jebel Ali'),\n",
       " ('Port of Jawaharlal Nehru', 'Port of Salalah'),\n",
       " ('Port of Jawaharlal Nehru', 'Port of Gaza'),\n",
       " ('Port of Jawaharlal Nehru', 'Port of Jebel Ali'),\n",
       " ('Port of Nagoya', 'Port of Salalah'),\n",
       " ('Port of Nagoya', 'Port of Gaza'),\n",
       " ('Port of Nagoya', 'Port of Jebel Ali'),\n",
       " ('Port of Busan', 'Port of Salalah'),\n",
       " ('Port of Busan', 'Port of Gaza'),\n",
       " ('Port of Busan', 'Port of Jebel Ali'),\n",
       " ('Port of Manzanillo', 'Port of Salalah'),\n",
       " ('Port of Manzanillo', 'Port of Gaza'),\n",
       " ('Port of Manzanillo', 'Port of Jebel Ali'),\n",
       " ('Port of Kaohsiung', 'Port of Salalah'),\n",
       " ('Port of Kaohsiung', 'Port of Gaza'),\n",
       " ('Port of Kaohsiung', 'Port of Jebel Ali'),\n",
       " ('Port of Mersin', 'Port of Salalah'),\n",
       " ('Port of Mersin', 'Port of Gaza'),\n",
       " ('Port of Mersin', 'Port of Jebel Ali'),\n",
       " ('Port of Immingham', 'Port of Salalah'),\n",
       " ('Port of Immingham', 'Port of Gaza'),\n",
       " ('Port of Immingham', 'Port of Jebel Ali'),\n",
       " ('Port of New York', 'Port of Salalah'),\n",
       " ('Port of New York', 'Port of Gaza'),\n",
       " ('Port of New York', 'Port of Jebel Ali'),\n",
       " ('Port of Los Angeles', 'Port of Salalah'),\n",
       " ('Port of Los Angeles', 'Port of Gaza'),\n",
       " ('Port of Los Angeles', 'Port of Jebel Ali')]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "routes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Decision Variables\n",
    "X = LpVariable.dicts(\"ShipmentAmount\",(supply_points, demand_points),0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Port of Shanghai': {'Port of Salalah': ShipmentAmount_Port_of_Shanghai_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Shanghai_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali},\n",
       " 'Port of Marseille': {'Port of Salalah': ShipmentAmount_Port_of_Marseille_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Marseille_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali},\n",
       " 'Port of Hamburg_Germany': {'Port of Salalah': ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali},\n",
       " 'Port of Budapest': {'Port of Salalah': ShipmentAmount_Port_of_Budapest_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Budapest_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali},\n",
       " 'Port of Jawaharlal Nehru': {'Port of Salalah': ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali},\n",
       " 'Port of Nagoya': {'Port of Salalah': ShipmentAmount_Port_of_Nagoya_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Nagoya_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali},\n",
       " 'Port of Busan': {'Port of Salalah': ShipmentAmount_Port_of_Busan_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Busan_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali},\n",
       " 'Port of Manzanillo': {'Port of Salalah': ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali},\n",
       " 'Port of Kaohsiung': {'Port of Salalah': ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali},\n",
       " 'Port of Mersin': {'Port of Salalah': ShipmentAmount_Port_of_Mersin_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Mersin_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali},\n",
       " 'Port of Immingham': {'Port of Salalah': ShipmentAmount_Port_of_Immingham_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Immingham_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali},\n",
       " 'Port of New York': {'Port of Salalah': ShipmentAmount_Port_of_New_York_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_New_York_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali},\n",
       " 'Port of Los Angeles': {'Port of Salalah': ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah,\n",
       "  'Port of Gaza': ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza,\n",
       "  'Port of Jebel Ali': ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali}}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Objective Function\n",
    "prob += sum(X[i][j]*distance[i][j] for (i,j) in routes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Transportation:\n",
       "MINIMIZE\n",
       "1992*ShipmentAmount_Port_of_Budapest_Port_of_Gaza + 5360*ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali + 4362*ShipmentAmount_Port_of_Budapest_Port_of_Salalah + 8020*ShipmentAmount_Port_of_Busan_Port_of_Gaza + 7143*ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali + 6786*ShipmentAmount_Port_of_Busan_Port_of_Salalah + 3973*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza + 7306*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali + 6307*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah + 3399*ShipmentAmount_Port_of_Immingham_Port_of_Gaza + 7080*ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali + 6081*ShipmentAmount_Port_of_Immingham_Port_of_Salalah + 3243*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza + 1335*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali + 1143*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah + 7144*ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza + 6063*ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali + 5704*ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah + 9280*ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza + 11116*ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali + 11137*ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah + 8088*ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza + 12790*ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali + 11791*ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah + 1631*ShipmentAmount_Port_of_Marseille_Port_of_Gaza + 5080*ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali + 4081*ShipmentAmount_Port_of_Marseille_Port_of_Salalah + 316*ShipmentAmount_Port_of_Mersin_Port_of_Gaza + 3576*ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali + 2577*ShipmentAmount_Port_of_Mersin_Port_of_Salalah + 8308*ShipmentAmount_Port_of_Nagoya_Port_of_Gaza + 7505*ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali + 7148*ShipmentAmount_Port_of_Nagoya_Port_of_Salalah + 5196*ShipmentAmount_Port_of_New_York_Port_of_Gaza + 8918*ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali + 7930*ShipmentAmount_Port_of_New_York_Port_of_Salalah + 7660*ShipmentAmount_Port_of_Shanghai_Port_of_Gaza + 6627*ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali + 6270*ShipmentAmount_Port_of_Shanghai_Port_of_Salalah + 0\n",
       "VARIABLES\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Salalah Continuous"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Transportation:\n",
       "MINIMIZE\n",
       "1992*ShipmentAmount_Port_of_Budapest_Port_of_Gaza + 5360*ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali + 4362*ShipmentAmount_Port_of_Budapest_Port_of_Salalah + 8020*ShipmentAmount_Port_of_Busan_Port_of_Gaza + 7143*ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali + 6786*ShipmentAmount_Port_of_Busan_Port_of_Salalah + 3973*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza + 7306*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali + 6307*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah + 3399*ShipmentAmount_Port_of_Immingham_Port_of_Gaza + 7080*ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali + 6081*ShipmentAmount_Port_of_Immingham_Port_of_Salalah + 3243*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza + 1335*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali + 1143*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah + 7144*ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza + 6063*ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali + 5704*ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah + 9280*ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza + 11116*ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali + 11137*ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah + 8088*ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza + 12790*ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali + 11791*ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah + 1631*ShipmentAmount_Port_of_Marseille_Port_of_Gaza + 5080*ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali + 4081*ShipmentAmount_Port_of_Marseille_Port_of_Salalah + 316*ShipmentAmount_Port_of_Mersin_Port_of_Gaza + 3576*ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali + 2577*ShipmentAmount_Port_of_Mersin_Port_of_Salalah + 8308*ShipmentAmount_Port_of_Nagoya_Port_of_Gaza + 7505*ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali + 7148*ShipmentAmount_Port_of_Nagoya_Port_of_Salalah + 5196*ShipmentAmount_Port_of_New_York_Port_of_Gaza + 8918*ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali + 7930*ShipmentAmount_Port_of_New_York_Port_of_Salalah + 7660*ShipmentAmount_Port_of_Shanghai_Port_of_Gaza + 6627*ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali + 6270*ShipmentAmount_Port_of_Shanghai_Port_of_Salalah + 0\n",
       "SUBJECT TO\n",
       "_C1: ShipmentAmount_Port_of_Budapest_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Salalah >= 8625729.772\n",
       "\n",
       "_C2: ShipmentAmount_Port_of_Budapest_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Gaza >= 7916745.706\n",
       "\n",
       "_C3: ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali >= 9169267.649\n",
       "\n",
       "VARIABLES\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Salalah Continuous"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Constraints\n",
    "for j in demand_points:\n",
    "    prob += sum(X[i][j] for i in supply_points) >= Fiber_demand[j]\n",
    "    \n",
    "prob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Transportation:\n",
       "MINIMIZE\n",
       "1992*ShipmentAmount_Port_of_Budapest_Port_of_Gaza + 5360*ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali + 4362*ShipmentAmount_Port_of_Budapest_Port_of_Salalah + 8020*ShipmentAmount_Port_of_Busan_Port_of_Gaza + 7143*ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali + 6786*ShipmentAmount_Port_of_Busan_Port_of_Salalah + 3973*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza + 7306*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali + 6307*ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah + 3399*ShipmentAmount_Port_of_Immingham_Port_of_Gaza + 7080*ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali + 6081*ShipmentAmount_Port_of_Immingham_Port_of_Salalah + 3243*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza + 1335*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali + 1143*ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah + 7144*ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza + 6063*ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali + 5704*ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah + 9280*ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza + 11116*ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali + 11137*ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah + 8088*ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza + 12790*ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali + 11791*ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah + 1631*ShipmentAmount_Port_of_Marseille_Port_of_Gaza + 5080*ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali + 4081*ShipmentAmount_Port_of_Marseille_Port_of_Salalah + 316*ShipmentAmount_Port_of_Mersin_Port_of_Gaza + 3576*ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali + 2577*ShipmentAmount_Port_of_Mersin_Port_of_Salalah + 8308*ShipmentAmount_Port_of_Nagoya_Port_of_Gaza + 7505*ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali + 7148*ShipmentAmount_Port_of_Nagoya_Port_of_Salalah + 5196*ShipmentAmount_Port_of_New_York_Port_of_Gaza + 8918*ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali + 7930*ShipmentAmount_Port_of_New_York_Port_of_Salalah + 7660*ShipmentAmount_Port_of_Shanghai_Port_of_Gaza + 6627*ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali + 6270*ShipmentAmount_Port_of_Shanghai_Port_of_Salalah + 0\n",
       "SUBJECT TO\n",
       "_C1: ShipmentAmount_Port_of_Budapest_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Salalah\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Salalah >= 8625729.772\n",
       "\n",
       "_C2: ShipmentAmount_Port_of_Budapest_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Gaza >= 7916745.706\n",
       "\n",
       "_C3: ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali >= 9169267.649\n",
       "\n",
       "_C4: ShipmentAmount_Port_of_Shanghai_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Shanghai_Port_of_Salalah = 7891206.7168\n",
       "\n",
       "_C5: ShipmentAmount_Port_of_Marseille_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Marseille_Port_of_Salalah = 4720787.52508\n",
       "\n",
       "_C6: ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah = 3013639.26908\n",
       "\n",
       "_C7: ShipmentAmount_Port_of_Budapest_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Budapest_Port_of_Salalah = 1741988.017\n",
       "\n",
       "_C8: ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah = 1532949.455\n",
       "\n",
       "_C9: ShipmentAmount_Port_of_Nagoya_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Nagoya_Port_of_Salalah = 1498109.694\n",
       "\n",
       "_C10: ShipmentAmount_Port_of_Busan_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Busan_Port_of_Salalah = 1289071.132\n",
       "\n",
       "_C11: ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah = 1080032.57\n",
       "\n",
       "_C12: ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah = 1010353.05\n",
       "\n",
       "_C13: ShipmentAmount_Port_of_Mersin_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Mersin_Port_of_Salalah = 870994.0084\n",
       "\n",
       "_C14: ShipmentAmount_Port_of_Immingham_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Immingham_Port_of_Salalah = 627115.686\n",
       "\n",
       "_C15: ShipmentAmount_Port_of_New_York_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_New_York_Port_of_Salalah = 256623.9121\n",
       "\n",
       "_C16: ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali\n",
       " + ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah = 178873.0921\n",
       "\n",
       "VARIABLES\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Budapest_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Busan_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Immingham_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Los_Angeles_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Manzanillo_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Marseille_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Mersin_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Nagoya_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_New_York_Port_of_Salalah Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Gaza Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali Continuous\n",
       "ShipmentAmount_Port_of_Shanghai_Port_of_Salalah Continuous"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Constraints\n",
    "for i in supply_points:\n",
    "    prob += sum(X[i][j] for j in demand_points) == Fiber_supply[i]\n",
    "prob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Status: Optimal\n",
      "ShipmentAmount_Port_of_Budapest_Port_of_Gaza = 1232187.0\n",
      "ShipmentAmount_Port_of_Budapest_Port_of_Salalah = 509801.0\n",
      "ShipmentAmount_Port_of_Busan_Port_of_Jebel_Ali = 1289071.1\n",
      "ShipmentAmount_Port_of_Hamburg_Germany_Port_of_Salalah = 3013639.3\n",
      "ShipmentAmount_Port_of_Immingham_Port_of_Gaza = 627115.69\n",
      "ShipmentAmount_Port_of_Jawaharlal_Nehru_Port_of_Jebel_Ali = 1532949.5\n",
      "ShipmentAmount_Port_of_Kaohsiung_Port_of_Salalah = 1010353.0\n",
      "ShipmentAmount_Port_of_Los_Angeles_Port_of_Jebel_Ali = 178873.09\n",
      "ShipmentAmount_Port_of_Manzanillo_Port_of_Gaza = 1080032.6\n",
      "ShipmentAmount_Port_of_Marseille_Port_of_Gaza = 4720787.5\n",
      "ShipmentAmount_Port_of_Mersin_Port_of_Salalah = 870994.01\n",
      "ShipmentAmount_Port_of_Nagoya_Port_of_Jebel_Ali = 1498109.7\n",
      "ShipmentAmount_Port_of_New_York_Port_of_Gaza = 256623.91\n",
      "ShipmentAmount_Port_of_Shanghai_Port_of_Jebel_Ali = 4670264.3\n",
      "ShipmentAmount_Port_of_Shanghai_Port_of_Salalah = 3220942.4\n",
      "Total kilogram_miles = 127223928135.68001\n"
     ]
    }
   ],
   "source": [
    "prob.solve()\n",
    "\n",
    "print(\"Status:\", LpStatus[prob.status])\n",
    "\n",
    "for v in prob.variables():\n",
    "    if v.varValue > 0:\n",
    "        print(v.name, \"=\", v.varValue)\n",
    "\n",
    "print(\"Total kilogram_miles =\", value(prob.objective))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
